class UsersController < ApplicationController
  # before_action用于在访问controller接口之前执行一个函数，这里是执行authorized判断用户是否登录
  # only参数是一个数组，指定哪些接口需要执行这个函数
  before_action :authorized, only: [:auto_login]

  # 注册
  def create
    @user = User.create(user_params)
    if @user.valid? # 字段验证，如长度，unique之类的
      token = encode_token({ user_id: @user.id }) # 使用用户的id来生成token，这里还可以加入email之类的字段
      render json: { user: @user, token: token }
    else
      render json: { error: 'Invalid username or password' }
    end
  end

  # 登录
  def login
    @user = User.find_by(username: params[:username])
    if @user&.authenticate(params[:password])
      # 使用&符号可以自动判断@user是否为nil，就不用写成 if @user && @user.authenticate
      # authenticate是bcrypt插件提供给model的函数，用于验证密码哈希
      token = encode_token({ user_id: @user.id }) # 使用用户的id来生成token，这里还可以加入email之类的字段
      response.set_header('Access-Control-Allow-Credentials', true) # 必须设置这个字段，允许跨域访问时携带token
      render json: { user: @user, token: token }
    else
      render json: { error: 'Invalid username or password' }
    end
  end

  # 自动登录
  def auto_login
    # 这里也可以是其他的功能，比如返回活动列表
    render json: @user
  end

  private

  # 参数限制
  def user_params
    params.permit(:username, :password, :age) # 只允许用户名、密码、年龄，其他参数将忽略
  end
end
